SQL ফাংশন এবং অপারেটরগুলি SQL কোয়েরি তৈরি করার জন্য অপরিহার্য টুলস। এগুলি ডেটা ম্যানিপুলেশন, গণনা এবং বিশ্লেষণ করার জন্য ব্যবহৃত হয়। SQL ফাংশন এবং অপারেটরগুলি ডেটাবেসে ডেটা প্রক্রিয়া করতে সহায়ক, যেমন যোগফল, গড়, গণনা, সার্চ, এবং অন্যান্য ক্রিয়া। নিচে SQL ফাংশন এবং অপারেটরের বিভিন্ন ধরণ এবং তাদের ব্যবহার ব্যাখ্যা করা হলো।
SQL ফাংশনগুলি নির্দিষ্ট অপারেশন বা গণনা সম্পাদন করতে ব্যবহৃত হয়। ফাংশনগুলির মধ্যে Scalar Functions (যেগুলি একক মান প্রক্রিয়া করে) এবং Aggregate Functions (যেগুলি একাধিক রেকর্ডের উপর গণনা করে) অন্তর্ভুক্ত থাকে।
Scalar Functions একক মানের উপর কাজ করে এবং এটি একটি একক মান প্রদান করে।
COUNT()
: রেকর্ডের সংখ্যা গণনা করতে ব্যবহৃত হয়।
SELECT COUNT(*) FROM employees;
SUM()
: নির্দিষ্ট কলামের মোট যোগফল বের করতে ব্যবহৃত হয়।
SELECT SUM(salary) FROM employees;
AVG()
: নির্দিষ্ট কলামের গড় মান বের করতে ব্যবহৃত হয়।
SELECT AVG(salary) FROM employees;
MIN()
: একটি কলামে সর্বনিম্ন মান বের করতে ব্যবহৃত হয়।
SELECT MIN(salary) FROM employees;
MAX()
: একটি কলামে সর্বোচ্চ মান বের করতে ব্যবহৃত হয়।
SELECT MAX(salary) FROM employees;
UPPER()
: টেক্সটকে বড় অক্ষরে রূপান্তরিত করে।
SELECT UPPER(first_name) FROM employees;
LOWER()
: টেক্সটকে ছোট অক্ষরে রূপান্তরিত করে।
SELECT LOWER(first_name) FROM employees;
CONCAT()
: দুইটি স্ট্রিং একত্রিত করতে ব্যবহৃত হয়।
SELECT CONCAT(first_name, ' ', last_name) FROM employees;
ROUND()
: একটি সংখ্যা নির্দিষ্ট দশমিক স্থানে রাউন্ড করতে ব্যবহৃত হয়।
SELECT ROUND(salary, 2) FROM employees;
LENGTH()
: একটি স্ট্রিংয়ের দৈর্ঘ্য বের করতে ব্যবহৃত হয়।
SELECT LENGTH(first_name) FROM employees;
NOW()
: বর্তমান সময় এবং তারিখ ফেরত দেয়।
SELECT NOW();
Aggregate Functions একাধিক রেকর্ডের উপর কাজ করে এবং একটি ফলাফল প্রদান করে।
COUNT()
: একটি টেবিল বা কলামের মোট রেকর্ড সংখ্যা গণনা করে। আগেই দেখানো হয়েছে।SUM()
: একটি কলামের মোট যোগফল বের করে। আগেই দেখানো হয়েছে।AVG()
: একটি কলামের গড় মান বের করে। আগেই দেখানো হয়েছে।MIN()
: একটি কলামের সর্বনিম্ন মান বের করে। আগেই দেখানো হয়েছে।MAX()
: একটি কলামের সর্বোচ্চ মান বের করে। আগেই দেখানো হয়েছে।SQL অপারেটরগুলি ডেটা ফিল্টারিং, সাচিং এবং প্রক্রিয়া করার জন্য ব্যবহৃত হয়। এগুলি বিভিন্ন ধরনের হতে পারে, যেমন:
এই অপারেটরগুলি গাণিতিক গণনা করতে ব্যবহৃত হয়।
+
: যোগফল।
SELECT price + tax FROM products;
-
: বিয়োগফল।
SELECT price - discount FROM products;
*
: গুণফল।
SELECT quantity * price FROM products;
/
: ভাগফল।
SELECT total_amount / quantity FROM products;
%
: ভাগশেষ (modulus)।
SELECT amount % 10 FROM payments;
এই অপারেটরগুলি ডেটা তুলনা করতে ব্যবহৃত হয়।
=
: সমান।
SELECT * FROM employees WHERE salary = 50000;
!=
বা <>
: সমান নয়।
SELECT * FROM employees WHERE salary != 50000;
>
: বড়।
SELECT * FROM employees WHERE salary > 50000;
<
: ছোট।
SELECT * FROM employees WHERE salary < 50000;
>=
: বড় বা সমান।
SELECT * FROM employees WHERE salary >= 50000;
<=
: ছোট বা সমান।
SELECT * FROM employees WHERE salary <= 50000;
BETWEEN
: একটি নির্দিষ্ট সীমার মধ্যে মান খুঁজে বের করা।
SELECT * FROM employees WHERE salary BETWEEN 40000 AND 60000;
IN
: নির্দিষ্ট মানের মধ্যে থাকা।
SELECT * FROM employees WHERE department IN ('HR', 'IT');
LIKE
: প্যাটার্ন ম্যাচিং (wildcard)।
SELECT * FROM employees WHERE name LIKE 'J%';
AND
: দুটি শর্ত পূর্ণ হলে সত্য ফেরত দেয়।
SELECT * FROM employees WHERE salary > 50000 AND department = 'HR';
OR
: কোনো একটি শর্ত পূর্ণ হলে সত্য ফেরত দেয়।
SELECT * FROM employees WHERE salary > 50000 OR department = 'IT';
NOT
: একটি শর্তের বিপরীত ফলাফল ফেরত দেয়।
SELECT * FROM employees WHERE NOT department = 'IT';
এই ফাংশনগুলি স্ট্রিং ডেটা টাইপের উপর কাজ করে এবং টেক্সট ম্যানিপুলেশন করতে সহায়ক।
CONCAT()
: স্ট্রিং একত্রিত করে।
SELECT CONCAT(first_name, ' ', last_name) FROM employees;
SUBSTRING()
: স্ট্রিংয়ের একটি নির্দিষ্ট অংশ বের করে।
SELECT SUBSTRING(first_name, 1, 3) FROM employees;
TRIM()
: স্ট্রিংয়ের অপ্রয়োজনীয় সাদা স্থান মুছে ফেলে।
SELECT TRIM(first_name) FROM employees;
SQL ফাংশন এবং অপারেটরগুলি ডেটার উপর বিভিন্ন গণনা এবং ম্যানিপুলেশন করার জন্য অত্যন্ত গুরুত্বপূর্ণ। Scalar Functions একক মান প্রক্রিয়া করে, এবং Aggregate Functions একাধিক রেকর্ডের উপর কাজ করে। অপারেটরগুলি ডেটা তুলনা, গণনা, বা যুক্ত করতে ব্যবহৃত হয়। SQL ফাংশন এবং অপারেটরগুলি ব্যবহার করে আপনি ডেটাবেসে দ্রুত এবং কার্যকরভাবে ডেটা বিশ্লেষণ করতে পারবেন।
Presto তে Scalar Functions হলো সেই ফাংশনগুলি যা এক বা একাধিক আর্গুমেন্ট গ্রহণ করে এবং একটি একক মান ফেরত দেয়। এই ফাংশনগুলি সাধারণত ডেটার উপর বিভিন্ন গণনা বা রূপান্তর করতে ব্যবহৃত হয়, যেমন সংখ্যা, তারিখ, স্ট্রিং ইত্যাদি।
Scalar Functions এর মাধ্যমে ডেটার উপর গাণিতিক, স্ট্রিং এবং লজিকাল অপারেশন করা সম্ভব। Presto তে বিল্ট-ইন অনেক scalar function রয়েছে, যেমন abs()
, length()
, lower()
, concat()
, round()
ইত্যাদি।
abs(x)
: একটি সংখ্যার গাণিতিক মান ফেরত দেয়।
SELECT abs(-5);
-- Output: 5
round(x, d)
: সংখ্যা x
কে d
দশমিক স্থান পর্যন্ত রাউন্ড করে।
SELECT round(3.14159, 2);
-- Output: 3.14
length(s)
: স্ট্রিং s
এর দৈর্ঘ্য ফেরত দেয়।
SELECT length('Presto');
-- Output: 6
lower(s)
: স্ট্রিং s
কে ছোট হাতের অক্ষরে রূপান্তরিত করে।
SELECT lower('Presto');
-- Output: presto
upper(s)
: স্ট্রিং s
কে বড় হাতের অক্ষরে রূপান্তরিত করে।
SELECT upper('Presto');
-- Output: PRESTO
current_date
: বর্তমান তারিখ ফেরত দেয়।
SELECT current_date;
-- Output: 2024-11-27 (এটি বর্তমান তারিখ)
date_add(unit, value, date)
: নির্দিষ্ট একক (যেমন দিন, মাস, বছর) এর মাধ্যমে একটি তারিখে যোগ করা হয়।
SELECT date_add('day', 10, current_date);
-- Output: 2024-12-07
date_sub(unit, value, date)
: নির্দিষ্ট একক এর মাধ্যমে একটি তারিখ থেকে কমানো হয়।
SELECT date_sub('month', 2, current_date);
-- Output: 2024-09-27
coalesce(a, b, ...)
: যদি প্রথম আর্গুমেন্ট NULL
হয়, তাহলে পরবর্তী আর্গুমেন্টের মান ফেরত দেয়।
SELECT coalesce(NULL, NULL, 'Presto');
-- Output: Presto
if(condition, true_value, false_value)
: একটি শর্তের উপর ভিত্তি করে দুটি মানের মধ্যে একটি ফেরত দেয়।
SELECT if(1 > 2, 'True', 'False');
-- Output: False
count()
, sum()
, avg()
ইত্যাদি।sum(column)
: একটি কলামের মোট যোগফল ফেরত দেয়।
SELECT sum(salary) FROM employees;
avg(column)
: একটি কলামের গড় মান ফেরত দেয়।
SELECT avg(salary) FROM employees;
Presto-তে Scalar Functions ব্যবহার করা অনেক সহজ। আপনি SQL কোয়েরি তে এই ফাংশনগুলি সরাসরি ব্যবহার করতে পারেন। নিচে কিছু উদাহরণ দেয়া হলো:
গণনা করা:
SELECT abs(-50); -- Output: 50
স্ট্রিং রূপান্তর:
SELECT upper('hello world'); -- Output: HELLO WORLD
তারিখের সাথে অপারেশন:
SELECT date_add('day', 5, current_date); -- Output: 2024-12-02 (যদি আজকের তারিখ 2024-11-27 হয়)
NULL মান ব্যবস্থাপনা:
SELECT coalesce(NULL, 100, 200); -- Output: 100
Presto তে Scalar Functions অত্যন্ত শক্তিশালী এবং ব্যবহারকারীকে একক মানের উপর অপারেশন করতে সাহায্য করে। গাণিতিক, স্ট্রিং, তারিখ/সময়, এবং লজিক্যাল বিভিন্ন অপারেশন সহ অন্যান্য অনেক ধরনের ফাংশন Presto তে উপলব্ধ রয়েছে। এগুলি ব্যবহার করে ডেটা প্রসেসিংকে আরও দক্ষ এবং কার্যকর করা যায়।
Aggregate Functions হল SQL ফাংশন যা একাধিক রেকর্ড বা রো সারি থেকে ডেটা একত্রিত করে এবং একটি একক ফলাফল প্রদান করে। Presto তে বিভিন্ন ধরনের aggregate functions রয়েছে যা ব্যবহারকারীদের বিশ্লেষণের জন্য ডেটা উপসংহার (summary) তৈরি করতে সহায়ক।
Presto তে কিছু সাধারণ aggregate functions ব্যবহার করা হয়, যেমন COUNT()
, SUM()
, AVG()
, MIN()
, MAX()
ইত্যাদি। নিচে এগুলির ব্যাখ্যা দেওয়া হলো:
COUNT()
ফাংশনটি একটি কলামে মোট সংখ্যা গণনা করে। এটি সাধারণত কতটি রেকর্ড বা ভ্যালু আছে তা জানার জন্য ব্যবহৃত হয়।
ব্যবহার:
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
উদাহরণ:
SELECT COUNT(*) FROM employees;
এই কোয়েরি সমস্ত কর্মচারী রেকর্ডের সংখ্যা গননা করবে।
SUM()
ফাংশনটি নির্দিষ্ট একটি কলামের সমস্ত মান যোগ করে একটি মোট মান প্রদান করে।
ব্যবহার:
SELECT SUM(column_name)
FROM table_name
WHERE condition;
উদাহরণ:
SELECT SUM(salary) FROM employees;
এই কোয়েরি সমস্ত কর্মচারীদের বেতনের মোট যোগফল প্রদান করবে।
AVG()
ফাংশনটি একটি কলামের গড় মান গণনা করে। এটি সংখ্যাতাত্ত্বিক মানগুলির গড় নির্ণয়ের জন্য ব্যবহৃত হয়।
ব্যবহার:
SELECT AVG(column_name)
FROM table_name
WHERE condition;
উদাহরণ:
SELECT AVG(age) FROM employees;
এই কোয়েরি কর্মচারীদের বয়সের গড় প্রদান করবে।
MIN()
ফাংশনটি একটি কলামের সর্বনিম্ন মান প্রদান করে।
ব্যবহার:
SELECT MIN(column_name)
FROM table_name
WHERE condition;
উদাহরণ:
SELECT MIN(salary) FROM employees;
এই কোয়েরি সমস্ত কর্মচারীদের মধ্যে সর্বনিম্ন বেতন প্রদান করবে।
MAX()
ফাংশনটি একটি কলামের সর্বোচ্চ মান প্রদান করে।
ব্যবহার:
SELECT MAX(column_name)
FROM table_name
WHERE condition;
উদাহরণ:
SELECT MAX(salary) FROM employees;
এই কোয়েরি সমস্ত কর্মচারীদের মধ্যে সর্বোচ্চ বেতন প্রদান করবে।
GROUP_CONCAT()
ফাংশনটি একটি কলামে সমস্ত মানকে একত্রিত করে, যাতে তারা একটি স্ট্রিং আকারে ফলাফল দেয়। এটি একাধিক মানকে একত্রে রিটার্ন করার জন্য ব্যবহৃত হয়।
ব্যবহার:
SELECT GROUP_CONCAT(column_name)
FROM table_name
GROUP BY another_column;
উদাহরণ:
SELECT GROUP_CONCAT(employee_name)
FROM employees
GROUP BY department;
এই কোয়েরি প্রতিটি বিভাগের সমস্ত কর্মচারীর নামকে একত্রিত করে একটি স্ট্রিং আকারে প্রদান করবে।
VAR_POP()
ফাংশনটি একটি কলামের জনসংখ্যার ভ্যারিয়েন্স প্রদান করে।VAR_SAMP()
ফাংশনটি একটি নমুনার ভ্যারিয়েন্স প্রদান করে।ব্যবহার:
SELECT VAR_POP(column_name)
FROM table_name;
SELECT VAR_SAMP(column_name)
FROM table_name;
উদাহরণ:
SELECT VAR_POP(salary) FROM employees;
STDDEV_POP()
ফাংশনটি একটি কলামের জনসংখ্যার স্ট্যান্ডার্ড ডেভিয়েশন প্রদান করে।STDDEV_SAMP()
ফাংশনটি একটি নমুনার স্ট্যান্ডার্ড ডেভিয়েশন প্রদান করে।ব্যবহার:
SELECT STDDEV_POP(column_name)
FROM table_name;
SELECT STDDEV_SAMP(column_name)
FROM table_name;
উদাহরণ:
SELECT STDDEV_POP(salary) FROM employees;
COUNT(DISTINCT)
ফাংশনটি একটি কলামে ভিন্ন (unique) মানের সংখ্যা গণনা করে। এটি ডুপ্লিকেট মান গোনে না।
ব্যবহার:
SELECT COUNT(DISTINCT column_name)
FROM table_name;
উদাহরণ:
SELECT COUNT(DISTINCT department) FROM employees;
এই কোয়েরি কর্মচারীদের বিভাগগুলির মধ্যে ভিন্ন বিভাগের সংখ্যা গণনা করবে।
HAVING
ক্লজটি সাধারণত GROUP BY
সহ ব্যবহার করা হয় যাতে aggregate functions এর ফলাফল উপর শর্ত আরোপ করা যায়।
ব্যবহার:
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 5;
উদাহরণ:
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;
এই কোয়েরি শুধুমাত্র তাদের বিভাগ প্রদর্শন করবে যেখানে গড় বেতন 50,000 এর বেশি।
সারাংশ: Presto তে Aggregate Functions এর মাধ্যমে ডেটা বিশ্লেষণের প্রক্রিয়া আরও সহজ হয়। এগুলি বড় ডেটাসেটের উপর ক্যালকুলেশন পরিচালনা করতে ব্যবহৃত হয় এবং ব্যবসায়িক সিদ্ধান্তে সহায়ক হতে পারে।
Window Functions হল SQL-এ ব্যবহৃত বিশেষ ধরনের ফাংশন যা একটি "window" বা "ভিউ" এর মধ্যে ডেটা প্রসেস করতে সক্ষম। এই ফাংশনগুলি সাধারণত ROW_NUMBER(), RANK(), LEAD(), LAG() ইত্যাদি যেমন অ্যাগ্রিগেট ফাংশনগুলির সাথে ব্যবহৃত হয়, কিন্তু এটি গ্রুপিং না করে ডেটাকে উইন্ডো ভিত্তিতে পরিচালনা করতে দেয়।
Presto-তে Window Functions ব্যবহার করে আপনি একটি নির্দিষ্ট রেঞ্জের উপর ভিত্তি করে ডেটা বিশ্লেষণ করতে পারবেন, যেমন একটি নির্দিষ্ট সময়ের মধ্যে চলমান গড়, র্যাঙ্কিং, শীর্ষ এবং নিচের মান খুঁজে বের করা।
Window Functions সাধারণত দুটি প্রধান অংশে বিভক্ত:
ROW_NUMBER()
, RANK()
, LEAD()
, ইত্যাদি)।SELECT column1, column2, window_function() OVER (PARTITION BY column1 ORDER BY column2)
FROM table_name;
এখানে:
window_function()
হল ব্যবহার করা উইন্ডো ফাংশন, যেমন ROW_NUMBER()
, RANK()
, LEAD()
, ইত্যাদি।PARTITION BY
হল ডেটাকে কীভাবে বিভক্ত করা হবে তা নির্দেশ করে।ORDER BY
হল সেই ক্রমে ডেটাকে সাজানোর জন্য নির্দেশনা দেয়, যার ওপর ভিত্তি করে উইন্ডো ফাংশন কাজ করবে।১. ROW_NUMBER()ROW_NUMBER()
ফাংশন প্রতিটি রেকর্ডকে একটি অনন্য রাঙ্ক প্রদান করে, যা তার অবস্থান অনুযায়ী সাজানো হয়।
SELECT customer_id, order_date, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS order_rank
FROM orders;
এখানে:
PARTITION BY customer_id
: প্রতিটি গ্রাহকের জন্য আলাদা আলাদা উইন্ডো তৈরি করা হচ্ছে।ORDER BY order_date
: অর্ডার তারিখ অনুযায়ী রেকর্ড সাজানো হচ্ছে।ফলাফল:
২. RANK()RANK()
ফাংশন প্রতিটি রেকর্ডকে একটি র্যাঙ্ক প্রদান করে, তবে একাধিক সমান মান থাকলে তারা একই র্যাঙ্ক পায়, এবং পরবর্তী র্যাঙ্কটি লাফ দিয়ে চলে যায়।
SELECT customer_id, order_date, amount, RANK() OVER (PARTITION BY customer_id ORDER BY amount DESC) AS rank
FROM orders;
এখানে:
RANK()
ফাংশনটি প্রতিটি গ্রাহকের জন্য অর্ডারের পরিমাণ অনুযায়ী র্যাঙ্ক প্রদান করবে, এবং যদি কোনো দুটি অর্ডারের পরিমাণ সমান থাকে, তাহলে তারা একই র্যাঙ্ক পাবে।ফলাফল:
৩. LEAD() এবং LAG()LEAD()
এবং LAG()
ফাংশন দুটি ব্যবহার করা হয় পেছনের বা পরের রেকর্ডের মান দেখতে।
LEAD() উদাহরণ:
SELECT customer_id, order_date, amount, LEAD(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS next_order_amount
FROM orders;
এখানে:
LEAD(amount)
পরবর্তী অর্ডারের পরিমাণ দেখাবে।LAG() উদাহরণ:
SELECT customer_id, order_date, amount, LAG(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS previous_order_amount
FROM orders;
এখানে:
LAG(amount)
পূর্ববর্তী অর্ডারের পরিমাণ দেখাবে।ফলাফল:
LEAD()
এবং LAG()
ব্যবহার করে আপনি প্রতিটি রেকর্ডের পরবর্তী বা পূর্ববর্তী মান দেখতে পারবেন, যা সময়ভিত্তিক বা ধারাবাহিক বিশ্লেষণের জন্য দরকারী।SUM() এবং AVG() ফাংশনও উইন্ডো ফাংশন হিসেবে ব্যবহৃত হতে পারে, যেখানে একটি নির্দিষ্ট উইন্ডোর মধ্যে মোট বা গড় মান বের করা হয়।
SUM() উদাহরণ:
SELECT customer_id, order_date, amount, SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sum
FROM orders;
এখানে:
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
নির্দেশ করে যে উইন্ডোটি বর্তমান রেকর্ড এবং এর পূর্ববর্তী সমস্ত রেকর্ডের মধ্যে থাকতে হবে।SUM(amount)
এর মাধ্যমে গ্রাহকের জন্য মোট অর্ডার পরিমাণ বের করা হচ্ছে।AVG() উদাহরণ:
SELECT customer_id, order_date, amount, AVG(amount) OVER (PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS moving_average
FROM orders;
এখানে:
AVG(amount)
গ্রাহকের জন্য চলমান গড় হিসাব করবে।Presto-তে Window Functions অত্যন্ত শক্তিশালী টুল, যা SQL কোয়েরি লেখার সময় উন্নত বিশ্লেষণ করতে সহায়ক। এগুলি আপনাকে গ্রুপিং ছাড়াই চলমান গড়, র্যাঙ্কিং, এবং অতিরিক্ত ডেটা বিশ্লেষণ করতে সক্ষম করে, যা ডেটা সায়েন্স এবং ব্যবসায়িক বিশ্লেষণের জন্য খুবই উপকারী।
Presto একটি শক্তিশালী SQL কোয়েরি ইঞ্জিন, কিন্তু কখনও কখনও কিছু বিশেষ ধরনের ফাংশন বা কাস্টম অপারেশন প্রয়োজন হতে পারে যা Presto-এর বিল্ট-ইন ফাংশনালিটি দ্বারা সরাসরি সম্পাদন করা সম্ভব নয়। এই পরিস্থিতিতে User Defined Functions (UDF) ব্যবহার করা হয়। Presto-তে UDF ব্যবহার করে আপনি নিজস্ব কাস্টম ফাংশন তৈরি করতে পারেন যা নির্দিষ্ট ডেটা প্রসেসিংয়ের জন্য উপযোগী।
User Defined Functions (UDF) হল এমন ফাংশন যা ব্যবহারকারী নিজেই ডিফাইন করে, সাধারণত প্রোগ্রামিং ভাষার সাহায্যে, যেমন Java। Presto তে UDF ব্যবহার করে আপনি নিম্নলিখিত সুবিধা পেতে পারেন:
Presto তে UDF তৈরি করতে Java প্রোগ্রামিং ভাষা ব্যবহার করতে হয়। Presto প্লাগইন আর্কিটেকচার সমর্থন করে এবং UDF তৈরি করার জন্য একটি স্পেসিফিক প্রক্রিয়া অনুসরণ করতে হয়। নিচে ধাপে ধাপে UDF তৈরি এবং কনফিগার করার প্রক্রিয়া দেওয়া হলো।
প্রথমে, Java ভাষায় একটি ক্লাস তৈরি করুন যা Presto ফাংশনকে বাস্তবায়ন করবে। নিচে একটি উদাহরণ দেয়া হলো:
package com.example.presto.udf;
import io.prestosql.spi.function.Description;
import io.prestosql.spi.function.SqlFunction;
import io.prestosql.spi.function.SqlScalarFunction;
import io.prestosql.spi.type.StandardTypes;
@SqlFunction("custom_addition")
@Description("Adds two numbers together")
public final class CustomAdditionFunction
{
private CustomAdditionFunction() {}
@SqlScalarFunction
@Description("Adds two numbers together")
public static long add(long a, long b)
{
return a + b;
}
}
এখানে, custom_addition
নামক একটি UDF তৈরি করা হয়েছে যা দুটি ইনপুট নম্বরের যোগফল প্রদান করবে।
@SqlFunction
: এটি এই ফাংশনটি Presto SQL ফাংশন হিসেবে ঘোষণা করে।@SqlScalarFunction
: এটি নির্দেশ করে যে ফাংশনটি SQL কুয়েরিতে ব্যবহৃত হবে।long a, long b
: দুটি ইনপুট প্যারামিটার হিসাবে দুইটি সংখ্যা নেয় এবং তাদের যোগফল প্রদান করে।Java ক্লাসটি কম্পাইল করতে আপনার Maven বা Gradle ব্যবহার করতে পারেন। Maven এর জন্য pom.xml কনফিগারেশন ব্যবহার করা যেতে পারে। উদাহরণ:
<dependency>
<groupId>io.prestosql</groupId>
<artifactId>presto-spi</artifactId>
<version>350</version>
</dependency>
এর পর Maven কমান্ড দিয়ে ক্লাস কম্পাইল করুন:
mvn clean install
এখন আপনার Java ফাংশন লাইব্রেরি Presto তে যুক্ত করতে হবে। এটি করার জন্য, আপনার .jar
ফাইলটি Presto সার্ভারের plugin
ফোল্ডারে রাখতে হবে।
cp target/your-udf.jar /opt/presto/plugin/
Presto এ UDF কাজ করার জন্য আপনাকে Presto এর plugin
ফোল্ডারে একটি কনফিগারেশন ফাইল তৈরি করতে হবে, যাতে Presto এই নতুন ফাংশনটি চিনতে পারে।
উদাহরণস্বরূপ, আপনি যদি com.example.presto.udf.CustomAdditionFunction
নামের ফাংশনটি ব্যবহার করতে চান, তবে আপনাকে এটি ডিফাইন করতে হবে।
এখন আপনি Presto SQL কোয়েরিতে আপনার কাস্টম ফাংশনটি ব্যবহার করতে পারবেন। উদাহরণ:
SELECT custom_addition(10, 20);
এই কোয়েরি 10
এবং 20
এর যোগফল ৩০ প্রদান করবে।
Presto তে UDF ব্যবহার করলে আপনি আরও কাস্টমাইজড এবং শক্তিশালী ডেটা বিশ্লেষণ তৈরি করতে পারেন যা স্ট্যান্ডার্ড SQL ফাংশনের বাইরে।
Read more